#include <assert.h>
#include <cmath>
#include <cstdio>
#include <cstring>
#include "airgap.h"

CAirGap::CAirGap(thm_t* thm, int pointNum) : CMaterial(AIRGAP_MATERIAL_NAME, stdout)
{
	assert(thm != 0);
	this->thm = thm;
	assert(pointNum > 0);
	this->PointNum = pointNum;
	this->lambda = 0.025;
	this->cp = 1005.;
	this->rho = 1.225;
}

double CAirGap::heatQuantity(const double T) const
{
		return rho*cp*T;
}
/** Теплоёмкость воздуха в диапазоне давлений[0.01 атм - 1 атм] и температур [0 - 100 град C] можно считать постоянной. */
double CAirGap::c(double T) const
{
	return cp;
}

double CAirGap::r(double T) const
{
	return rho;
}
double CAirGap::l(double T) const
{
	assert((PointNum > thm->fcnum)&&(PointNum < thm->lcnum));
	double Tl = thm->T[PointNum-1];
	double Tr = thm->T[PointNum+1];
	double delta = thm->width[PointNum];
	double eps; // Приведённая степень черноты.
	double epsl = thm->m[PointNum-1]->eps(Tl);
	double epsr = thm->m[PointNum+1]->eps(Tr);
	assert(epsl > 0.);
	assert(epsr > 0.);
	eps = 1./(1./epsl + 1./epsr - 1.);
	assert((eps >= 0.) && (eps <= 1.));
	
	double Lrad;
	double Qrad;
	
	if (fabs(Tl-Tr) < 1.0E-3)
		Lrad = 1.0E-10;
	else {
		Qrad = eps*5.67*(pow(Tl/100., 4.) - pow(Tr/100., 4.));
		Lrad = fabs(Qrad*delta/(Tl-Tr)); // Излучательная составляющая коэффициента теплопроводности
	}
	assert((Lrad >= 0.) || !printf("Lrad=%E\tQrad=%E\tdelta=%E\tTl=%E\tTr=%E\n", Lrad, Qrad, delta, Tl, Tr));

	return lambda + Lrad;
}
double CAirGap::eps(double T) const
{
	return 0.;
}
double CAirGap::a(double T) const
{
	return 0.;
}
double CAirGap::b(double T) const
{
	return 0.;
}
void CAirGap::print(FILE *out)
{

}
	
